URL扩展名隐藏:重写与重定向



我已经阅读了很多问题和答案,但我无法决定哪个更好或如何使用这些扩展隐藏方式的组合。
我想要的是StackOverflow 一样重写 URL!那么我还应该怎么做才能拥有这些规则:

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.phpsingle.php,并且我在每个子文件夹中都有这样的.htaccess:

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>

您可以使用:

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 也在使用的。就像最现代的 Web 应用程序一样

这意味着所有请求都通过单个 PHP 脚本,如 index.php。

因此,您将请求的路径提供给索引.php文件,它会处理请求并加载请求的页面。

以下是它如何与PHP一起工作的解释:http://www.binpress.com/tutorial/php-bootstrapping-crash-course/146

如果你使用像Zend Framework这样的框架,那么已经集成了一个引导程序。

最新更新