2013-06-17 3 views
-1

Я всегда смущался о переписывании модема .htaccess, поэтому, пожалуйста, со мной.Htaccess Mod Rewrite issue

I want the following url: 

http://localhost/new/post?url=sample-post-one 

to Look Like this via htaccess mod_rewrite: 

http://localhost/new/post/sample-post-one/ 

Это может быть вопрос, который задают уже или аналогичный один, но я пытался понять это, так как через пару часов и не получили решения.

Любая помощь будет высоко оценена. Благодаря!

Update Вот что я пытался

<Files .htaccess,.svn> order allow,deny deny from all </Files> 
Options +FollowSymlinks 
# For Removing .php extension from files 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

# Rewrite rule 
RewriteRule ^post/([a-zA-Z0-9_-]+)/?$ post?url=$1 [L] 
+0

добавил следующий код HTAccess и удалил расширение ".php":!. (. *) RewriteEngine на RewriteCond% {REQUEST_FILENAME} -d RewriteCond% {REQUEST_FILENAME} \ PHP -f RewriteRule^$ $ 1 .php Пробовал разные коды, которые я нашел из разных ресурсов, но я не смог сделать вывод, возможно, – Mark

+0

Пара вещей, я добавил вашу информацию о остальной части вашего '.htaccess' на ваш вопрос. У вас будет много лучших результатов, если вы предоставите каждый бит информации, чтобы люди могли помочь. Кроме того, ваш «вопрос» по-прежнему не является технически задающим вопрос (именно поэтому он находится в рейтинге и потенциально закрыт). Это больше похоже на «Я не могу этого сделать, и я не собираюсь пытаться, исправить это.« –

+0

@ AbsoluteƵERØ серьезный человек, с которым я пытался получить решение с двух часов, если бы я не мог этого сделать, и я не собираюсь исправлять его, я бы никогда не просил о помощи на очень первое место – Mark

ответ

0

Это должно работать:

RewriteEngine on 
RewriteRule ^post/([^/.]+)/?$ post?url=$1 [L] 

Или лучше ...

RewriteEngine on 
RewriteRule ^post/([a-zA-Z0-9_-]+)/?$ post?url=$1 [L] 

Кстати, вы должны посмотрите на руководства, например this one ,

+0

Ditch период. который соответствует всем символам. –

+0

Спасибо за помощь, но я все еще получаю 500 Внутренняя ошибка сервера Вот полный .htaccess скрипт в любом случае ' заказ разрешить, запретить отрицать всех Options + FollowSymlinks # Для удаления .php расширение из файлов RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -d RewriteCond% {REQUEST_FILENAME} \. PHP -f RewriteRule^(. *) $ $ 1.php # Rewrite правило RewriteRule^post/([a-zA-Z0-9 _-] +) /? $ post? url = $ 1 [L] ' – Mark

+0

не существует oblem с правилом удаления расширения .php. как это работает с ресурсами, такими как изображения, css ... – ibi0tux

0

Вы можете использовать ниже код:

http://localhost/new/post?url=sample-post-one 
RewriteRule ^post/([0-9]+)/?$ post?url=$1 [NC,L] # Handle post requests 

и получить более подробную информацию вы можете refer to this

+0

Это не работает, ваш код только перезаписывает сообщения, которые являются числовыми значениями, а не текстом. – ibi0tux

+0

Он не работает, он говорит: Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. – Mark

+0

вы должны добавить только регулярное выражение, чтобы включить весь символ ([a-zA-Z0-9 _-] +), и если вы используете какой-либо специальный charecter, вы также можете сделать tha –

0

В основном мы захватывая бит для последней папки. Остальное может быть жестко закодировано. Также вы должны удалить конкурирующее правило. ^ указывает начало строки. $ - это конец строки. Если вы используете оба этих символа, все должно буквально соответствовать, за исключением бит, в котором мы используем шаблоны REGEX для сопоставления. Также все зависит от регистра.

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^new/post/([^/]+)/?$ new/post?url=$1 

Если вы знаете, что вы только собираетесь, чтобы буквы, цифры, точки и дефисы, то вы можете сделать это:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^new/post/([^A-Za-z0-9.-]+)/?$ new/post?url=$1 

Если по какой-то причине вы в том числе и new/postpost действительно ваш document root он должен выглядеть следующим образом:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^A-Za-z0-9.-]+)/?$ ?url=$1 

Apache является хорошо документированы приложение. Они предоставляют отличный ресурс с сотнями примеров на их сайте с объяснениями каждого из них в mod_rewrite documentation.