Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess重写所有URL,即使路径_Php_.htaccess_Mod Rewrite - Fatal编程技术网

Php .htaccess重写所有URL,即使路径

Php .htaccess重写所有URL,即使路径,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我已经编写了一些PHP代码,这些代码将根据URL指导用户,我还找到了一些htaccess代码,这些代码将URL提供给索引页面,使我的代码能够工作。然而,它也从技术上揭示了什么是文件/文件夹,什么不是 如果我去website.com/somethingrandom/somethingelse,我会得到一个404错误,而去website.com/cache/private会说禁止 我该如何编辑它,使它看起来像除了一些选定的文件类型(如图像、css和js文件)之外,没有任何文件存在 以下是目前的代码:

我已经编写了一些PHP代码,这些代码将根据URL指导用户,我还找到了一些htaccess代码,这些代码将URL提供给索引页面,使我的代码能够工作。然而,它也从技术上揭示了什么是文件/文件夹,什么不是

如果我去
website.com/somethingrandom/somethingelse
,我会得到一个404错误,而去
website.com/cache/private
会说禁止

我该如何编辑它,使它看起来像除了一些选定的文件类型(如图像、css和js文件)之外,没有任何文件存在

以下是目前的代码:

RewriteBase /
RewriteEngine On
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-f
# This rule converts your flat link to a query
RewriteRule ^(.*)$ index.php?_page_location=$1 [L,NC,NE]

如果您想隐藏某个文件或目录,即将其显示为不存在,则可以使用该标志重定向

这告诉客户端,没有名为
cache/private
()的文件。不过要小心,这是为所有客户准备的,甚至是你自己

要限制这一点,您必须使用some作为规则的前缀,或将其包装在类似或类似的条件语句中


如果要隐藏所有文件,请使用“更广泛”的正则表达式,如

RewriteRule ^ - [R=404,L]
这将返回所有网站URL的“未找到”。您还可以提供一组URL,如下所示

RewriteRule ^(?:cache/private|secrets|database) - [R=404,L]
这将隐藏下面的一切

  • 缓存/专用
  • 秘密
  • 数据库

有关如何自定义您自己的图案的详细信息,请参阅和。

您的规则如下:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L,NC]

# add trailing slash to directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

# If the request is not for known file types
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|php|bmp|png|ico|tiff|css|js)$ [NC]
# This rule converts your flat link to a query
RewriteRule .* index.php?_page_location=$0 [L,QSA]

那你为什么要检查-d目录的存在性呢?嗯,好的,谢谢,这一半是有效的,我只在文件上测试过。删除
-d
-f
位仍然表示禁止使用文件。尽管如此,谢谢,已经有了,文件在这里(很抱歉没有提前链接整个内容)-取出所有
文件匹配部分,看看它是否有效。这些重写规则本身不会生成404/403响应。您还没有详细介绍环境的其余部分(没有提到子目录中的.htaccess限制)。别让人猜。这不会导致具体的答案。我更喜欢在所有文件中充当“毯子”的东西,但是,如果我还需要它,知道它是有用的,所以谢谢:)非常感谢,一旦我完成工作,我必须检查一下,但它看起来可能就是我想要的:)嗯,它几乎可以工作了,但在跟踪文件夹链接时有一个小问题,不确定它是否是可修复的。任何文件都不会发生这种情况,但如果您要访问
website.com/folder1/folder2
,它会将URL更改为
website.com/folder1/folder2?\u page\u location=folder1/folder2
。此外,这并不重要,如果您不知道,请不要担心,但是,如果我想允许/禁止某个文件,我该如何覆盖这些文件类型呢?我刚刚添加了一个规则来管理目录。在完全清除浏览器缓存后,请尝试我的更新规则。
Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L,NC]

# add trailing slash to directories
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

# If the request is not for known file types
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|php|bmp|png|ico|tiff|css|js)$ [NC]
# This rule converts your flat link to a query
RewriteRule .* index.php?_page_location=$0 [L,QSA]