2015-08-13 3 views
1

У меня есть закодированный скрипт, который показывает url как example.com/pagename.rewriteengine и прямой комбайн с htaccess

я хочу использовать RewriteEngine, чтобы показать, как example.com/page=pagename и перенаправить example.com/pagename в example.com/, чтобы скрыть скрипт TypeCode.

Вы можете мне помочь?

можно ли «полностью изменить» на другую вещь, например, page=? Это то, что именно я пытаюсь сделать.

я уже попробовал некоторые коды, как

RewriteEngine On 
RewriteRule ^page\=([^/]*)$ /$1 [L] 

он показывает example.com/page=pagename правильно, но вы можете загрузить example.com/pagename и example.com/page=pagenamepagename

+0

Почему не вместо этого ваши URL-адреса структурирована: 'example.com/pagename'? 'example.com/page = pagename' на самом деле не кажется улучшением по сравнению с оригиналом? – MrWhite

+0

Мне нужно это для цели – jimuty

ответ

2

но вы можете загрузить example.com/?a=pagename

Чтобы предотвратить это, вы также необходимо внешнее перенаправление на ваш желаемый URL (перед вашей внутренней перезаписью) , Для того, чтобы предотвратить цикл перезаписи, вы можете проверить на THE_REQUEST:

# Redirect typed URLs to the desired URLs 
RewriteCond %{THE_REQUEST} \?a=([^\ ]*) 
RewriteRule ^$ /page=%1? [R,L] 

Задний ? на подмене удаляет исходную строку запроса. (После того, как вы счастливы с переадресацией, изменить его на постоянной переадресации, R=301.)

но вы можете загрузить ... example.com/page=pagename?a=pagename

Ну, это, как ожидается. Однако page=pagename займет приоритет, и ?a=pagename будет лишен вашей перезаписи. Однако отклонять такие запросы. то есть. Только переписать, когда нет строки запроса затем измените существующее правило с условием:

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^page=([^/]*)$ /?a=$1 [L] 

Это приведет к такому URL, вызвав 404.


UPDATE # 1: обрабатывать запросы для example.com/pagename, вместо example.com/page=pagename:

# Redirect "ugly" URLs to the desired URLs 
RewriteCond %{THE_REQUEST} \?a=([^\ ]*) 
RewriteRule ^$ /%1? [R,L] 

# Internally rewrite the "pretty" URL to the real URL 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^([^/]*)$ /?a=$1 [L] 

UPDATE # 2: Более строгая версия выше. Это позволяет только "ИмяСтраницы" состоять из символов a - z, A - Z, 0 - 9, _ и -:

# Redirect "ugly" URLs to the desired URLs 
RewriteCond %{THE_REQUEST} \?a=([\w-]*) 
RewriteRule ^$ /%1? [R,L] 

# Internally rewrite the "pretty" URL to the real URL 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^([\w-]*)$ /?a=$1 [L] 
+1

wow спасибо. это работает. спасибо вам очень много: * – jimuty

+0

можете ли вы повторно выполнить команду за example.com/pagename?спасибо alot – jimuty

+0

come back @ w3d pleaseeee – jimuty

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