2013-04-04 2 views
0
Options +FollowSymLinks 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) /files.php?q=$1 

RewriteCond %{HTTP_HOST} ^mysite.com 
RewriteRule (.*) http://m.mysite.com/$1 [R=301,L] 

AddHandler application/x-httpd-php5 .html .htm .txt .php 

my .htaccess использует основной файл "files.php" для всех запросов. в моем files.php у меня есть некоторый код в нем, что включает в себя hrefs, который выглядит следующим образом:mod_rewrite скрыть расширения файлов

/people/john -> когда человек нажимает на это, он должен пойти: people.php?q=john однако, мой .htaccess не перенаправлять когда человек нажимает на это /people/john. Кстати, URL должен всегда указывать /people/john NOT people.php?q=john, хотя это то, что происходит за кулисами.

Просто хотел сказать, у меня есть

/city/newyork --> city.php?q=newyork 
/country/australia --> country.php?q=australia 

Я изо всех сил и поиск здесь, чтобы найти точно, но все же не повезло. Я ценю все ответы.

+0

Вы не одиноки, правила mod_rewrite могут ввести в заблуждение. Я хотел бы увидеть решение этого вопроса ... – Revent

+0

Нам нужно увидеть код, о котором вы говорите; мы не можем просто понять, что это не сработает. –

+0

G-Nuggets, мой код включен выше. весь url обрабатывается в файле files.php, поэтому files.php похож на основной индекс или каталог, где все обрабатывается. поэтому он содержит такие вещи:/city/newyork и т. д.и по URL-адресу он выглядит так/city/newyork, однако позади сцены это на самом деле скрипты, которые отображает: city.php? q = newyork. НТН. – NULL

ответ

1

Исходя из ваших примеров, вы получили URL, как это:

/city/newyork, where city is the php file to call with parameter newyork 

Если это то, что вы хотите, попробуйте следующее: Options + FollowSymLinks RewriteEngine на

# Rewrite /city/newyork to city.php?q=newyork 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*) /$1.php?q=$2 [L] 

# Rewrite all urls without a second/to files.php?q=$1 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) /files.php?q=$1 [L] 

RewriteCond %{HTTP_HOST} ^mysite.com 
RewriteRule (.*) http://m.mysite.com/$1 [R=301,L] 

AddHandler application/x-httpd-php5 .html .htm .txt .php 
+0

Спасибо, но это пока не работает, я использую cpanel, вы думаете, что кроме .htaccess есть что-нибудь еще, что я должен искать? как в виртуальном хосте apache или что-то в этом роде? возможно, что-то не было настроено должным образом? – NULL

+0

Получили ли вы инфинитивный цикл? Я думаю, что в конце строк RewriteRule отсутствует [L]. –

+0

О, Боже, ваше решение так близко, хорошо, поэтому структура папок работает, однако, когда у меня только есть www.mywebsite.com/newyork, она меняет ее на www.mywebsite.com/newyork.php, скорее это будет www .mywebsite.com/myfiles.php? q = newyork, нам нужно исправить условие перезаписи, но вы близко ответите! помогите мне :) не забывайте, что url должен всегда читать: www.mywebsite.com/newyork – NULL

0

Хотите сделать его динамичным? Я имею в виду, /$anything1/$anything2 будет переназначен в /$anything1.php?=$anything2:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$ 
RewriteRule ^(.*) /%1.php?q=%2 

Или попробуйте это, если код выше не работает:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$ 
RewriteRule ^(.*) http://%{HTTP_HOST}/%1.php?q=%2 [P] 
+0

Спасибо, но он все еще не работает, я использую cpanel, вы думаете, что кроме .htaccess есть что-нибудь еще, что я должен искать? как в виртуальном хосте apache или что-то в этом роде? возможно, что-то не было настроено должным образом? – NULL

+0

Что происходит? Вы действительно хотите переписать их или перенаправить? Согласно вашему вопросу, ваш «RewriteEngine» работает. В любом случае, вы можете проверить мои обновления выше. – 5ervant

0

Вот что я использую с CodeIgniter (поддерживает очень глубокий A/B/C/D/E/F/г)

RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ files.php?/$1 [L] 

По существу строка за строкой он говорит
- переписывают двигатель переключатель на
- использовать web_root (поэтому он не может быть/для вас, если вы находитесь в подпапке)
- если URL не существующий файл
- и URL не существующий реж
- сопоставьте аргумент файла files.php

Только что понял, что вы используете Files.php ... странно, нужно просто называть его индексом для согласованности, если это то, что все должно пройти, или создать индекс, который маршрутизирует папки/файлы/* через index.php ? = вкладка файлы & ...

Надеется, что это помогает

+0

Спасибо, но это пока не работает, я использую cpanel, вы думаете, что кроме .htaccess есть что-нибудь еще, что я должен искать? как в виртуальном хосте apache или что-то в этом роде? возможно, что-то не было настроено должным образом? – NULL

0

FAA, я сделал то, что вы сказали, и ниже мои переменные сервера, я думаю, что правильные переменные должен быть один, который говорит «должна быть такими: "ниже.

["QUERY_STRING"]=> 
    string(17) "q=city/newyork" 
    ["REDIRECT_QUERY_STRING"]=> 
    string(17) "q=city/newyork" 
    ["REDIRECT_STATUS"]=> 
    string(3) "200" 
    ["REDIRECT_URL"]=> 
    string(16) "/city/newyork" 
["REQUEST_URI"]=> 
    string(16) "/city/newyork" 
    ["SCRIPT_FILENAME"]=> 
    string(30) "/home/mywebsite/myfiles.php" 
    ["SCRIPT_NAME"]=> 
    string(14) "/myfiles.php" 
["PHP_SELF"]=> 
    string(14) "/myfiles.php" 
    ["argv"]=> 
    array(1) { 
    [0]=> 
    string(17) "q=city/newyork" 
    } 




should be this: 
["QUERY_STRING"]=> 
    string(16) "q=newyork" 
    ["REDIRECT_QUERY_STRING"]=> 
    string(16) "q=newyork" 
    ["REDIRECT_STATUS"]=> 
    string(3) "200" 
    ["REDIRECT_URL"]=> 
    string(25) "/city/newyork" 
["REQUEST_URI"]=> 
    string(25) "/city/newyork" 
    ["SCRIPT_FILENAME"]=> 
    string(30) "/home/mywebsite/city.php" 
    ["SCRIPT_NAME"]=> 
    string(14) "/city.php" 
["PHP_SELF"]=> 
    string(14) "/city.php" 
    ["argv"]=> 
    array(1) { 
    [0]=> 
    string(16) "q=newyork" 
    } 
+0

Решение Jeroen находится близко, чтобы выбрать ответ. поэтому в основном его код работает, однако сервер делает это www.mywebsite.com/newyork.php, где, как и должно быть www.mywebsite.com/myfiles.php?q=newyork, URL должен также казаться аккуратным и прохладным например, www.mywebsite.com/newyork – NULL

+0

«REDIRECT_QUERY_STRING» является «q = city/newyork», поэтому ** REDIRECTION WORKING **. Если вы хотите только «q = newyork», не вводите * city/newyork *, введите только */newyork * в строке браузера или ссылке. Это легко, правило передает весь URI-путь, поскольку это то, что вы сказали ему делать с группой (. *). Чтобы исключить «city» из группы, измените правило на «RewriteRule^city /(.*) /myfiles.php?q=$1 [R, L]' –

+0

Но опять же проблема НЕ с правилами.Проблема связана с PHP-кодом, как я уже говорил несколько раз. Является ли код в скрипте, который должен иметь возможность ** взорваться ** или отделить строку запроса GET с соответствующими параметрами. Важно иметь весь URI-путь, как сейчас, поэтому не изменяйте правило, изменяйте код. Есть сотни примеров того, как делать то, что вам нужно, поэтому удалите свои ответы здесь, ничего не ответив и отправьте еще один вопрос с запросом кода. –

Смежные вопросы