Укрытие URL-адресов: переписать и перенаправить

Я прочитал много вопросов и ответов, но я не могу решить, какой из них лучше или как использовать комбинацию этих способов скрытия расширения. то, что я хочу, это переписывать URL как stackoverflow ! так что еще я должен сделать, чтобы иметь эти правила:

url: example.com/file.anyEXT... show content of => 404
url: example.com/unknown-Cat... show content of => 404

url: example.com/cat1 show content of => example.com/cat1/index.php
url: example.com/cat1/index.php show content of => 404
url: example.com/cat1/any...any show content of => 404
url: example.com/cat1/11/title show content of => example.com/cat1/single.php (post id 11)

но мои файлы htaccess просто выполняют следующие действия:

url: example.com/file.anyEXT 
 show content of => example.com/index.php (should show 404)

url: example.com/unknown-Cat
 show content of => example.com/index.php (should show 404)

url: example.com/unknown-Cat/
 show broken content of => index.php => cant load css and js => (should show 404)

url: example.com/file.anyEXT/
 show broken content of => index.php => cant load css and js => (should show 404)

url: example.com/cat1 
 show content of => example.com/cat1/index.php (works fine!)

url: example.com/cat1/index.php
 show content of => example.com/cat1/index.php (should show 404)

url: example.com/cat1/any...any
 show content of => 404 (works fine!)

url: example.com/cat1/11/title
 show content of => example.com/cat1/single.php (post id 11) (works fine!)

Что у меня есть

mydomain-|
 |
 |
 |__cat1-|__.htaccess // cat1 htaccess
 | |__index.php
 | |__single.php
 |
 |__cat2-|__.htaccess // cat2 htaccess
 | |__index.php
 | |__single.php
 ...
 |__.htaccess // root htaccess
 |__index.php // home-page

мой htaccess основан на большинстве предложенных способов:

<ifmodule mod_rewrite.c="">

# Enable Rewrite Engine
RewriteEngine On
RewriteBase /

<files ".htaccess"="">
order allow,deny
deny from all
</files> 
Options All -Indexes

# Redirect from www.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

</ifmodule>

Это то, что я использовал в своей корневой папке, и во всех моих подпапках у меня есть два файла index.php и single.php и у меня есть.htaccess, как это в каждой из single.php:

Options +FollowSymLinks
<ifmodule mod_rewrite.c="">
RewriteEngine on
RewriteBase /cat1/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\d+)/(.+?)/?$ single.php?id=$1&title=$2 [L,QSA]

</ifmodule>
2 ответа

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

DocumentRoot/.htaccess :

<ifmodule mod_rewrite.c="">

<files ".htaccess"="">
order allow,deny
deny from all
</files> 
Options All -Indexes

RewriteEngine On
RewriteBase /

# Redirect from www.
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,NE,R=301]

# 404 for index.php in URL
RewriteCond %{THE_REQUEST} /index\.php[\s?/] [NC]
RewriteRule ^ - [L,R=404]

</ifmodule>

/cat1/.htaccess :

Options +FollowSymLinks
<ifmodule mod_rewrite.c="">
RewriteEngine on
RewriteBase /cat1/

RewriteCond %{THE_REQUEST} /index\.php[?\s] [NC]
RewriteRule ^index\.php$ - [L,R=404]

RewriteRule ^(\d+)/([^/]+)/?$ single.php?id=$1&title=$2 [L,QSA]

</ifmodule>


Я не уверен, что mod_rewrite даже способен на то, что вы хотите сделать. Но я думаю, что то, что вы действительно хотите, - это самонастраивание. И это то, что я думаю, что использует stackoverflow.com. Как и самые современные веб-приложения

Это означает, что все запросы проходят через один PHP-скрипт, например index.php.

Таким образом, вы передадите путь к вашему файлу index.php и обработаете запрос и загрузите запрошенную страницу.

Вот объяснение, как он может работать с PHP: http://www.binpress.com/tutorial/php-bootstrapping-crash-course/146

Если вы используете фреймворк, такой как Zend Framework, в нем уже есть встроенная система начальной загрузки.

licensed under cc by-sa 3.0 with attribution.